import java.util.*;

public class Solution {
    //给定一个未排序的整数数组 nums ，找出数字连续的最长序列（不要求序列元素在原数组中连续）的长度。
    //
    //请你设计并实现时间复杂度为O(n) 的算法解决此问题。
    //
    //来源：力扣（LeetCode）
    //链接：https://leetcode.cn/problems/longest-consecutive-sequence
    //著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
    //输入：nums = [100,4,200,1,3,2]
    //输出：4
    //解释：最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

    public static void main(String[] args) {
//        int[] nums = {100,4,200,1,3,2};
//        int[] nums = {10,12,13,8,17,11};
        int[] nums = {0,3,7,2,5,8,4,6,0,1};
//        int[] nums = {0,0,-1};
//        int[] nums = {1,2,0,1};


        int i = longestConsecutive(nums);
        System.out.println("Solution.main: "+i);

    }

    public static int longestConsecutive(int[] nums) {
        int max = 1;
        List<Integer> list1 = new ArrayList();
        for (int num : nums) {
            if(!list1.contains(num)){
                list1.add(num);
            }
        }
        int[] num = list1.stream().filter(integer -> integer!=null).mapToInt(i->i).toArray();
        Arrays.sort(num);//[0, 0, 1, 2, 3, 4, 5, 6, 7, 8]
       
        HashMap<Integer, List<Integer>> map =new HashMap<>();
        if(num.length ==0){
            return 0;
        }
        for (int i = 0; i < num.length; i++) {
            List<Integer> list = new ArrayList<>();
            list.add(num[i]);
            map.put(num[i],list);
            if (i>0){
                if (num[i-1] == (num[i]-1)){
                    list.addAll(map.get(num[i-1]) );
                    int size = map.get(num[i - 1]).size() +1;
                    max = size>max? size:max;
                }else {
                    //如果断是这样
                    int size = map.get(num[i - 1]).size();
                    max = size>max? size:max;
                }

            }
        }
//        System.out.println(Arrays.toString(num));
        return max;
    }
}
